package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author willbee
 */
// 在SpringBoot项目中，我们可以很优雅的使用注解来实现定时任务，首先创建项目，导入依赖：
// 在主类上使用@EnableScheduling注解开启对定时任务的支持，然后启动项目
@RestController
@EnableScheduling
@SpringBootApplication
public class App {

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }

    @GetMapping("/")
    public String index() {
        return "index666";
    }

    /**
     *  fixedDelay = 5000           //上一次执行完毕时间点之后多长时间再执行。//上一次执行完毕时间点之后5秒再执行
        fixedDelayString = "5000"   //上一次执行完毕时间点之后5秒再执行,fixedDelay 意思相同，只是使用字符串的形式。唯一不同的是支持占位符。如：${time.fixedDelay}
        fixedRate = 1000            //上一次开始执行时间点之后多长时间再执行。
        fixedRateString 与 fixedRate意思相同，只是使用字符串的形式。唯一不同的是支持占位符。
        cron = "0/1 29 16 * * ?"    //下午16点29分时，每秒执行一次
        cron = "0/1 * * * * ?"      //每秒执行一次 , 可以使用占位符
        zone = ""       表示时区
        initialDelay=1000, fixedRate=5000      //第一次延迟多长时间后再执行。//第一次延迟1秒后执行，之后按fixedRate的规则每5秒执行一次
        initialDelayString     与 initialDelay 意思相同，只是使用字符串的形式。唯一不同的是支持占位符。
     */
//    @Scheduled(cron = "${time.cron}")
    public void callback() {
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("df = " + df.format(new Date()));
    }

//    @Scheduled(cron="*/${time.interval} * * * * *")
    void testPlaceholder2() {
        System.out.println("Execute at " + System.currentTimeMillis());
    }
}
